--[[
    函数：lua_expire_check
    功能：解除超时锁，字符串
    参数：ARGV[1]:current_time,当前时间戳，字符串
    参数：ARGV[2]:expire_limit,超时的秒，字符串
    返回：0表示成功，1表示失败
--]]

-- 秒杀场次的key的前缀
local PREFIX_ACTIVITY_A = "activity_a_"
-- 秒杀项目的key的前缀
local PREFIX_ACTIVITY_R = "activity_r_"
-- 秒杀锁的key的前缀
local PREFIX_ACTIVITY_L = "activity_l_"
-- key的连接符号
local PREFIX_C = "_"
-- key的连接符号
local PREFIX_S = "*"


-- 计算t2-t1的时间差是否大于limit
local timeDiff = function(t1,t2,limit)
    return tonumber(t2)-tonumber(t1)-tonumber(limit)
end



-- 遍历锁表
local l_key = PREFIX_ACTIVITY_L..PREFIX_S..PREFIX_C..PREFIX_S..PREFIX_C..PREFIX_S
local l_keys = redis.call('keys',l_key)
local l_len = #l_keys
if(l_len==0)
then
    return 0
end

for i= 0, l_len-1 do
    -- 只检测success为0的锁
    local l_key_2 = l_keys[i+1]
    local locks = redis.call('hmget', l_key_2,'create_time','success','act_id','r_id')
    local success = tonumber(locks[2]) or 0
    if(success==0 )
    then
        -- 如果发现用户正在秒杀中的时间过长，则解锁
        local td=timeDiff(locks[1],ARGV[1],ARGV[2])
        if(td> 0)
        then
            redis.call('del',l_key_2)

            -- 秒杀项目的剩余锁加1
            local r_key = PREFIX_ACTIVITY_R..locks[3]..PREFIX_C..locks[4]
            redis.call('hincrby',r_key, 'rest_qty',1)

        end
    end
end


return 0